package com.yhy.tools;

import java.io.InputStream; //导入java.io.InputStream类
import java.sql.*;  //导入java.sql包中的所有类
import java.util.Properties; //导入java.util.Properties类


public class ConnDB {
	public Connection conn = null; // 声明Connection对象的实例
	public Statement stmt = null; // 声明Statement对象的实例
	public ResultSet rs = null; //  声明ResultSet对象的实例
	private static String propFileName = "connDB.properties"; // 指定资源文件保存的位置
	private static Properties prop = new Properties(); // 创建并实例化Properties对象的实例
	//数据库驱动
			private static String driver ="com.mysql.jdbc.Driver"; //注册server驱动
			//连接数据库的URL地址ַ
			private static String url="jdbc:mysql://127.0.0.1:3306/db_User?useUnicode=true&characterEncoding=UTF-8"; 
			//数据库的用户名
			private static final String username="root";
			//数据库的密码
			private static final String password="123456";
		 		
			//读取connDB.properties配置文件
			public ConnDB() { 
				try { 
					InputStream in = getClass().getResourceAsStream(propFileName);
					prop.load(in); 
					driver = prop.getProperty("DB_CLASS_NAME");
					// 获取连接的URL
					url = prop.getProperty("DB_URL", url);
				} catch (Exception e) {
					e.printStackTrace(); // 输出异常信息
				}
			}
	
			
			/**
			 * 功能：获取连接的语句
			 * 
			 * @return
			 */
			public static Connection getConnection() throws Exception {
				Connection conn = null;
				try { // 连接数据库时可能发生异常因此需要捕捉该异常
					Class.forName(driver).newInstance(); // 装载数据库驱动
					conn = DriverManager.getConnection(url, username, password); // 建立与数据库URL中定义的数据库的连接
					
				} catch (Exception ee) {
					ee.printStackTrace(); //输出异常信息
				}
				if (conn == null) {
					System.err
							.println("警告:DbConnectionManager.getConnection()获得数据库链接失败.\r\n\r\n链接类型:"
									+ driver + "\r\n链接位置:" + url); // 在控制台上输出提示信息
				}
				return conn; //返回数据库连接对象
			}

			/*
			 * 功能：执行查询语句
			 */
			public  ResultSet executeQuery(String sql) throws Exception {
				try { //捕捉异常
					conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
					stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_READ_ONLY);
					rs = stmt.executeQuery(sql);
				} catch (SQLException ex) {
					System.err.println(ex.getMessage()); // 输出异常信息
				}
				return rs; // 返回结果集对象
			}

			/*
			 * 功能:执行更新操作
			 */
			public int executeUpdate(String sql) throws Exception {
				int result = 0; //定义保存返回值的变量
				try { // 捕捉异常
					conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
					stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_READ_ONLY);
					result = stmt.executeUpdate(sql); // 执行更新操作
				} catch (SQLException ex) {
					result = 0; // 将保存返回值的变量赋值为0
				}
				return result; // 返回保存返回值的变量
			}

			/*
			 * 功能:关闭数据库的连接
			 */
			public void close() {
				try { // 捕捉异常
					if (rs != null) { //当ResultSet对象的实例rs不为空时
						rs.close(); // 关闭ResultSet对象
					}
					if (stmt != null) { // 当Statement对象的实例stmt不为空时
						stmt.close(); // 关闭Statement对象
					}
					if (conn != null) { // 当Connection对象的实例conn不为空时
						conn.close(); // 关闭Connection对象
						System.out.println("成功关闭！");
					}
				} catch (Exception e) {
					e.printStackTrace(System.err); // 输出异常信息
				}
			}
			
			
			//mysql测试函数
			public static void main(String[] args)
			{
				ConnDB dbConn=new ConnDB();
				try
				{
					//连接测试
					Connection conn=getConnection();
					System.out.println("连接成功！");
					
					//查询语句测试 
					ResultSet rs = dbConn.executeQuery("SELECT * FROM tb_userInfo WHERE username='ccc'");
					
					//如果有数据，rs.next()返回true
				    while(rs.next())
				    {
				    	// 取出这一行记录
				    	String name = rs.getString("username");
				    	String pwd = rs.getString("pwd"); // 可能为null
				    	
				    	System.out.println( name + "\t" + pwd );	           
				    }
				    
				    //关闭mysql连接
				    dbConn.close();
				    
					
				} catch (Exception e)
				{
					System.out.println("连接失败！");
				}
				
				
			}
		}

	

	
